The present invention relates to the field of information handling systems. More particularly, it relates to a system and method for improving performance and quality of printed documents by accumulating, storing and using resource accounting information with a print job.
It is well known to provide the output from a computer system in a printed form. A peripheral device, a printer, is coupled to the computing system by means of hardware such as printer adapter cards and cabling. Since a printer can often be efficiently shared between two or more computing systems, it is known to have a single machine in the network, a printer server, dedicated to providing the interface between the printer and the other machines in the network. Further, it is also known to have software modules such as graphics drivers and printer drivers to insulate the typical applications running in the computer systems from the need to know the peculiarities and details of printing via a particular printer attached to the network.
The printing subsystem, including the graphics and printer drivers, receives graphics calls from the applications and translates those into a print job. During the creation of a print job, an application may use a variety of resources such as fonts, color palettes, patterns and other printer resources. These printer resources are often not handled optimally by the print subsystem, because the print system does not know when and how often these resources will be used. More specifically, since the printer driver which is creating the data stream for the printer does not know when or how often fonts are used, the printer driver may download a font multiple times or unnecessarily download a font when only a few characters are used.
Under some printer memory management systems, a downloaded font must be sent to the printer between pages so it can be locked in the job memory and used on other pages. Since the print system does not know in advance the fonts which are used within a page, the font must be downloaded twice, once when the font is used and again between pages for subsequent uses. Thus, these management systems increase the amount of data sent to the printer and slow the print process. Similarly, since the print system does not know what color palettes may be used during a print job, it can not correctly set up its hardware palette to represent the colors most frequently used in the document. Usually, this causes the printed colors to be changed or remapped when printing to the device.
In today's information handling systems, a typical print subsystem performs the spooling and creation of a printer specific data stream on behalf of the application submitting the print request. Usually, the printing process is divided into two parts, spooling or queuing of the print data and de-spooling or sending the data to the device. The actual creation of the printer specific data stream can be done during the spooling phase, or in some configurations, i.e. when a metafile is used as a spool file, the printer specific data stream can be created during the de-spooling phase. Depending on the system configuration, the network connectivity and the server functionality, both phases of the print process may be done on a single system or the first phase may be done on a client system and the second phase may be done on a server system.
A typical print system consists of the following components or combinations of the following components to produce similar functionality. Referring to FIG. 1, in a distributed environment, a client machine 11 will typically request printing services from a print server 13 via a network 15, the print server 13 being coupled to one or more printers 17. The process begins when an application 19 produces a print job by making a series of graphics calls according to a graphic API. The graphics engine 21 is the component which is responsible for mapping or converting the application interfaces or graphics API calls to the printer driver interfaces. The printer drivers 23 and 35 are the components which are responsible for creating the printer specific data that is sent to the printer 17 to produce the desired output. In many instances, this component 23 provides configurable settings and returns information about the device 17. In some systems, the printer drivers 23 and 35 are called formatters since they format the data appropriately for the printer. In other systems, this component 23 is called a transform since it transforms the operating system calls or input stream to the data stream appropriate for the printer 17.
The spooler 25, 27 is the component which stores and retrieves the print job 29 using a queuing process to coordinate access to the printer 17. The queue driver 31 is sometimes used in print systems to preform at the spool data before sending the data to the printer driver 35 installed for the device. In most cases, this component 31 is handling the case where a metafile has been spooled and the metafile must be played back to the underlying print components by calling operating system components. The operating system components parse the metafile and convert the metafile back to graphics calls that can be passed the graphics engine 33. In other systems, where printer specific data has been spooled, the queue driver 31 simply passes the raw data to the underlying components of the print system. The graphics engine 33 at the server is responsible for mapping or converting the application interfaces or graphics API calls to the printer driver 35 interfaces. The printer driver 35 at the server is responsible for creating the printer specific data which is sent to the printer to produce the desired output.
The port driver 37 is a component in some printing systems which separates the logic of how to communicate or send data to a physical device driver 39. In these systems, the port driver 37 is responsible for handling the device driver interface to the printer. The physical device driver 39 is the component which is responsible for the hardware protocols used to communicate with or transmit data to the printer 17.
One prior art solution for managing font resources downloaded to a printer is to delete fonts on a least recently used basis when the maximum number of fonts have been downloaded. This method is inefficient because it disregards when and how often a font may be used again and may download a font that has minimum usage. Another prior art method for managing printing resources is to simply stop downloading resources when the maximum number of resources that can be downloaded to the printer is reached. This method does not account for fonts that may have large amounts of usage at the end of the document.
Other prior art systems have used font downloaders which are independent programs. These stand alone downloaders send all the fonts down before the beginning of a series of jobs. These fonts can take up memory from the print jobs, since they are resident in memory even if the font is not used. Some other prior art systems download fonts twice to get the font in global memory hoping the font will be used again. This method may waste printer memory and certainly takes additional time.
The present invention provides an improved method for handling printer resources.